#ifndef _PCRESOURCE_GUI_H_
#define _PCRESOURCE_GUI_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "lvgl.h"

typedef void (*exit_cb_t)(lv_event_t *);
typedef void (*set_next_theme_t)(void);


typedef struct _gui_opt
{
    exit_cb_t exit_cb;
    set_next_theme_t set_next_theme;
}gui_opt_t;

//PC硬件资源信息，带一位小数的数据均为扩大10倍厚的整数部分
typedef struct _pc_res_info
{
    int cpu_usage;                              //CPU利用率(%)
    int cpu_temp;                               //CPU温度(C)
    int cpu_freq;                                 //CPU主频(MHz)
    int cpu_power;                            //CPU功耗(W)，扩大10倍

    int gpu_usage;                            //GPU利用率(%)
    int gpu_temp;                             //GPU温度(C)
    int gpu_power;                          //GPU功耗(W)，扩大10倍
    int gpu_freq;                               //GPU核心频率

    int ram_usage;                           //RAM使用率(%)
    int ram_used;                             //RAM使用量(MB)

    int net_upload_speed;           //网络上行速率(KB/s)，扩大10倍
    int net_download_speed;     //网络下行速率(KB/s)，扩大10倍

    int gpu_ram_used;       //GPU内存使用量(MB)
    int gpu_ram_usage;          //GPU内存使用率 

    int disk_temp;                  //硬盘温度(C)
    int disk_usage;                 //硬盘使用率(%)

    int cpu_fan_speed;          //CPU风扇转速(RPM)
    int gpu_fan_speed;          //GPU风扇转速(RPM)

    int min;            //系统时间: 分
    int hour;           //系统时间: 时

    int date;           //系统日期: 日
    int month;      //系统日期: 月
    int year;           //系统日期: 年

    char cpu_name[64];      //CPU型号
    char gpu_name[64];      //GPU型号
}PCResInfo;

//主题操作函数集合
typedef struct _gui_theme_operations
{
    void (*init)(lv_obj_t *parent, gui_opt_t *opts);
    void (*update)(PCResInfo *info);
    void (*release)(void);
}gui_theme_operations;

void pc_resource_gui_init(gui_opt_t *opts);
void pc_resource_gui_add_theme_list(const char *name, gui_theme_operations *opts);
void pc_resource_gui_update_data(PCResInfo *info);
void pc_resource_gui_change_theme(int tag);
void pc_resource_gui_set_next_theme(void);
void pc_resource_gui_release(void);

void chart_auto_scale(lv_obj_t *chart, lv_chart_series_t *series, int min, int max);
void chart_draw_evnet_cb(lv_event_t *e);

#ifdef __cplusplus
}
#endif



#endif


